#ifndef CHAT_MYSQL_FRIEND_REQUEST_H
#define CHAT_MYSQL_FRIEND_REQUEST_H

#include <memory>
#include <odb/database.hxx>
#include <odb/mysql/database.hxx>
#include <string>
#include <vector>

#include "database_factory.h"
#include "friend_request.hxx"

namespace chat {
class FriendRequestTable {
   public:
    FriendRequestTable(const std::shared_ptr<odb::mysql::database>& db): db_(db) {}

    bool insert(FriendRequest& friend_request);
    bool remove(const std::string& user_id, const std::string& peer_id);
    bool exists(const std::string& user_id, const std::string& peer_id);

    /**
     * @brief 获取用户的好友申请
     * 
     * @param user_id 响应者的用户id
     * 
     * @note: 查询哪些请求者(user_id)对响应者(peer_id)发送了好友申请
     */
    std::vector<std::string> peers(const std::string& user_id);

   private:
    std::shared_ptr<odb::mysql::database> db_ = nullptr;
};
using FriendRequestTablePtr = std::shared_ptr<FriendRequestTable>;
}

#endif  // CHAT_MYSQL_FRIEND_REQUEST_H
